package com.lpb.spring.lpbspring.ioc;

/**
 * @ClassName BeanPostProcessor
 * @Description bean的增强器
 * aop的实现原理就是 将用户的具体增强实现（实现的advice接口后写的具体实现）
 * 根据具体增强的位置 插入到原bean对象相应的位置
 * 那么就对bean对象创建代理对象 可以在代理对象的invoke方法里把用户对某个方法的增强 和原方法融合在一起
 * 因此 aop是基与BeanPostProcessor实现的
 * 通过aop增强某个方法 一般是说在类初始化后 创建类的代理 融合增强实现。所以aop是BeanPostProcessor中bean后置增强的
 * 一种具体实现。ß
 * @date 2022/12/5 22:57
 * @Version 1.0
 * @authoe linpengbo
 */
public interface BeanPostProcessor {

    /**bean初始化前的增强
     * @param bean
     * @param beanName
     * @return
     * @throws Exception
     */
    default Object postProcessBeforeInitialization(Object bean, String beanName) throws Exception {
        return bean;
    }

    /**bean初始化后的增强
     * @param bean
     * @param beanName
     * @return
     * @throws Exception
     */
    default Object postProcessAfterInitialization(Object bean, String beanName) throws Exception {
        return bean;
    }
}
